<?php
namespace App\Http\Controllers\Push;

use App\Http\Controllers\Controller;
use Config;

class JPushController extends Controller
{	
	private $app_key;
	private $master_secret;
	private $client;
	
	function __construct(){
		require_once(app_path().'/Library/JPush/autoload.php');
        $this->app_key = Config::get('zgssystem.jpush_key');
        $this->master_secret = Config::get('zgssystem.jpush_secret');
		$this->client = new \JPush\Client($this->app_key, $this->master_secret);
	}
	
	//推送至所有人
	public function sendMsgAll($msg_content, $msg_title=''){
		
		/**
		 *  @function [parameter]  setPlatform ==>  ['all', 'android', 'ios', 'winphone']
		 *  @function [parameter]  setNotificationAlert ==>  发送的内容
		 *  @function [parameter]  message ==>  ['title', 'content_type', 'extras'];
		 *  @function [parameter]  addTag / addAlias / addTagAnd / addRegistrationId 用一个便可满足大多数的场景需求,多项 audience 调用表示其结果的交集
		 */
		
		$response = $this->client->push()
						   ->setPlatform('all')
						   ->addAllAudience()
						   ->setNotificationAlert($msg_content)
						   ->message($msg_content, array(
								'title' => $msg_title,
								'content_type' => 'text',
						   ))
						   ->options(array(
							   // 推送序号，纯粹用来作为 API 调用标识，
							   'sendno' => time(),
							   
							   // 离线消息保留时长(秒)，设置为 0 表示不保留离线消息，只有推送当前在线的用户可以收到
							   // 推送当前用户不在线时，为该用户保留多长时间的离线消息，以便其上线时再次推送，最长10天。
							   'time_to_live' => 86400*7,

							   // 是否生产环境，True 生产环境，False 开发环境
							   'apns_production' => false,

							   // 定速推送时长(分钟)，给定的 n 分钟内，均匀地向这次推送的目标用户推送。最大值为1400.未设置则不是定速推送
							   // 'big_push_duration' => 1
						   ))
						   ->send();
		return $response;
	}
	
	//推送 分组
	public function sendMsgTags($msg_content, $msg_title='', $tags=[]){

		$response = $this->client->push()
						   ->setPlatform('all')
						   ->addTag($tags)
						   ->setNotificationAlert($msg_content)
						   ->message($msg_content, array(
								'title' => $msg_title,
								'content_type' => 'text',
						   ))
						   ->options(array(
							   'sendno' => time(),
							   'time_to_live' => 86400*7,
							   'apns_production' => false,
							   // 'big_push_duration' => 1
						   ))
						   ->send();
		return $response;
	}
	
	// 推送 个人
	public function sendMsgAlias($msg_content, $msg_title='', $alias=[]){
		$response = $this->client->push()
						   ->setPlatform('all')
						   ->addAlias($alias)
						   ->setNotificationAlert($msg_content)
						   ->message($msg_content, array(
								'title' => $msg_title,
								'content_type' => 'text',
						   ))
						   ->options(array(
							   'sendno' => time(),
							   'time_to_live' => 86400*7,
							   'apns_production' => false,
							   // 'big_push_duration' => 1
						   ))
						   ->send();
		return $response;
	}
}